#ifndef EPOLLER_H
#define EPOLLER_H
#include <sys/epoll.h>
#include <fcntl.h>
#include <unistd.h>
#include <assert.h>
#include <vector>
#include <errno.h>

class Epoller                                       //定义的Epoll的管理类Epoller
{
public:
    explicit Epoller(int maxEvent = 1024);          // 定义的Epoller的构造函数，explicit 用于防止单参数构造函数的隐式转换
    ~Epoller();                                     //Epoller类的析构函数
    bool AddFd(int fd,uint32_t event);              //Epoller类的AddFd方法，参数有两个，分别是要添加的文件描述符fd和要关心的事件event
    bool ModFd(int fd,uint32_t events);             //Epoller类的ModFd方法，参数有两个，分别是要关心的文件描述符fd和要修改成的事件event
    bool DelFd(int fd);                             //Epoller类的删除FD的方法，参数是要删除的FD
    int Wait(int timeoutMs = -1);                   //Epoller的Wait函数，参数是timeoutMs，等待超时的事件
    int GetEventFd(size_t i) const;                 //Epoller类的GetEventFd函数，参数只有i，代表要获取哪个Event结构体的FD
    uint32_t GetEvents(size_t i) const;             //Epoller类的GetEventFd函数，参数只有i，代表要获取哪个events_的event
private:
    int epollFd_;                                   //Epoller的epollFd_的成员，由epoller_create创造并返回的epoll文件描述符
    std::vector<struct epoll_event> events_;        //Epoll_event数组，用来装载已经就绪的成员
};
#endif